# Roel Matthysen
# s0202264
# Finale versie Project Deel 2

# Variabele voor de geselecteerde compiler (zie fortrancompilers)
########################################
# Vlag voor de compiler
########################################
FC=gfortran
########################################
# Extra vlaggen voor GCOV
########################################
COVERAGE = --coverage -pg -fprofile-arcs -ftest-coverage
########################################
# Algemene compilerevlaggen
########################################
FFLAGS_nagfor= -C=all -gline -u -colour 
FFLAGS_gfortran=-O3  -Wtabs -fbounds-check 
FFLAGS_g95= -Wall -O3 -fbounds-check -ftrace=full 
FFLAGS_ifort= -check all -warn -free -Tf
# Selecteer de juiste vlaggen voor de huidige compiler
FFLAGS=$(FFLAGS_$(FC))
########################################
# Libraries voor LAPACK, BLAS en FFTW
########################################
LAPACKLIB=-L/home/u0060262/H03F0 -llapack-$(FC) 
BLASLIB=-L/home/u0060262/H03F0 -lblas-$(FC)
FFTWLIB = /usr/lib/libfftw3.so.3
LAPACKLIBTHUIS = -L/Users/roel/Downloads/lapack-3.4.1/SRC/ -llapack
FFTWLIBTHUIS = -L/usr/local/ -lfftw3


########################################
# Standaard wordt matrixexp gecompileerd
########################################
default: matrixexp

########################################
# Linken van de testen
########################################
test: src/fftw.o src/IO.o src/methods.o src/auxtest.o src/time.o src/test.o 
	$(FC) -o test src/test.o src/methods.o src/IO.o src/fftw.o src/auxtest.o src/time.o $(LAPACKLIB) $(BLASLIB) $(FFTWLIB)
	$(RM) src/*.o *.mod src/*.mod

########################################
# Linken van de testen (eigen machine)
########################################	
thuis: src/fftw.o src/IO.o src/auxtest.o src/methods.o src/time.o src/test.o 
	$(FC) -o test src/test.o src/methods.o src/IO.o src/fftw.o src/auxtest.o src/time.o  $(LAPACKLIBTHUIS) $(FFTWLIBTHUIS)
	$(RM) src/*.o *.mod src/*.mod
	./test
	
########################################
# Linken van matrixexp
########################################
matrixexp: src/IO.o src/fftw.o src/methods.o src/matrixexp.o
	$(FC) -o matrixexp src/matrixexp.o src/methods.o src/IO.o src/fftw.o $(LAPACKLIBTHUIS) $(FFTWLIBTHUIS)
	$(RM) src/*.o *.mod src/*.mod
	
########################################
# Compileren van de verschillende source files
########################################
src/test.o: src/test.f95
	$(FC) -c $(FFLAGS) src/test.f95 -o src/test.o

src/matrixexp.o: src/matrixexp.f95
	$(FC) -c $(FFLAGS) src/matrixexp.f95 -o src/matrixexp.o

src/methods.o: src/IO.o src/fftw.o src/methods.f95
	$(FC) -c $(FFLAGS) src/methods.f95 -o src/methods.o 

src/IO.o: src/IO.f95
	$(FC) -c $(FFLAGS) src/IO.f95 -o src/IO.o 
	
src/fftw.o: src/fftw.f95
	$(FC) -c $(FFLAGS) src/fftw.f95 -o src/fftw.o
	
src/auxtest.o: src/IO.o src/auxtest.f95
	$(FC) -c $(FFLAGS) src/auxtest.f95 -o src/auxtest.o
	
src/time.o:src/time.f95
	$(FC) -c $(FFLAGS) src/time.f95 -o src/time.o

########################################
# Directory opschonen
########################################
clean:
	$(RM) src/*.o src/*.mod 

########################################
# Directory opschonen en binaries verwijderen
########################################
veryclean: clean
	$(RM) matrixexp test
